package cn.edu.ncu.housinghub.controller.common;

import cn.edu.ncu.housinghub.constant.ErrorCodeConstant;
import cn.edu.ncu.housinghub.util.OssUtil;
import cn.edu.ncu.housinghub.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * 文件上传控制器
 */
@RestController
@RequestMapping("/upload")
@CrossOrigin(origins = "*")
public class FileUploadController {

    @Autowired
    private OssUtil ossUtil;

    /**
     * 图片上传接口
     * @param file 上传的文件
     * @return 上传结果
     */
    @PostMapping("/image")
    public Result uploadImage(@RequestParam("file") MultipartFile file) {
        try {
            // 验证文件
            if (file.isEmpty()) {
                return Result.error(ErrorCodeConstant.APPLY_ERROR.getCode(), "上传文件不能为空");
            }

            // 验证文件类型
            String contentType = file.getContentType();
            if (contentType == null || !contentType.startsWith("image/")) {
                return Result.error(ErrorCodeConstant.APPLY_ERROR.getCode(), "只能上传图片文件");
            }

            // 验证文件大小（5MB）
            if (file.getSize() > 5 * 1024 * 1024) {
                return Result.error(ErrorCodeConstant.APPLY_ERROR.getCode(), "图片大小不能超过5MB");
            }

            // 使用OSS上传文件
            String fileUrl = ossUtil.uploadFile(file, "images/");

            // 返回结果
            Map<String, Object> result = new HashMap<>();
            result.put("url", fileUrl);
            result.put("filename", file.getOriginalFilename());
            result.put("originalName", file.getOriginalFilename());
            result.put("size", file.getSize());

            return Result.success(result);

        } catch (Exception e) {
            return Result.error(ErrorCodeConstant.APPLY_ERROR.getCode(), "文件上传失败：" + e.getMessage());
        }
    }

    /**
     * 文件删除接口
     * @param fileUrl 文件URL
     * @return 删除结果
     */
    @DeleteMapping("/image")
    public Result deleteImage(@RequestParam String fileUrl) {
        try {
            ossUtil.deleteFile(fileUrl);
            return Result.success("文件删除成功");
        } catch (Exception e) {
            return Result.error(ErrorCodeConstant.APPLY_ERROR.getCode(), "文件删除失败：" + e.getMessage());
        }
    }
}
